package com.iplant.base.utils.annotation.join;


import com.iplant.base.po.enums.DBSchemas;
import com.iplant.base.utils.general.StringUtils;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * 关联表字段
 * @author xiuto
 */
@Inherited
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD})
public @interface DBJoin {

    /**
     * 字段名称
     *
     * @return
     */
    String name();

    /**
     * 表名称  同别名的表 表名相同 默认去第一个表名
     *
     * @return
     */
    String tableName() default  "";

    /**
     * 表别名   同表的只需要给一个别名就够了 默认取第一个别名 条件最好用别名写 默认t 为主表别名
     *
     * @return
     */
    String tableAsName() ;


    /**
     * 数据库名称
     *
     * @return
     */
    DBSchemas Schemas() default DBSchemas.Basic;

    /**
     * 关联模式 1 left 2 inner 3 right
     *
     * @return
     */
    DBJoinMode JoinMode() default DBJoinMode.Left;

    /**
     * 关联顺序
     * @return
     */
    int JoinIndex() default 1;

    /**
     * 关联条件  多个  默认用and 连接
     * @return
     */
    String[] ConditionalJoin() default "";

    /**
     * 关联主表数据库字段名
     * @return
     */
    String MainTableField() default "";

    enum DBJoinMode {

        Left, Inner, Right;

        public String getName() {
            return this.name();
        }

    }



}
